En Triton, la unidad fundamental de ejecución cambia del hilo escalar CUDA a la instancia de programa. Esto representa una abstracción de un bloque de hilos de GPU, donde una sola instancia maneja un bloque vectorizado de elementos simultáneamente.
1. La identidad de la instancia de programa
Cada unidad de ejecución obtiene su identidad mediante pid = tl.program_id(eje=0). Piensa en un montacargas de almacén (la instancia de programa) recogiendo un paleta (el bloque) de 128 cajas, comparado con un único trabajador (hilo CUDA) que recoge una sola caja.
2. Triton frente a tensores de PyTorch
Entender la brecha semántica es crucial para la gestión de memoria:
- Tensor de PyTorch: Un objeto Python del lado del host que envuelve el almacenamiento en VRAM, los desplazamientos y los metadatos.
- Tensor de Triton: Un objeto de nivel de compilador que representa valores o punteros residentes en registros o SRAM.
Objeto Python que apunta a memoria global contigua.
Un bloque 2D/1D de datos dentro de los registros del compilador.
3. Naturaleza SPMD
Triton sigue un modelo Programa único, múltiples datos (SPMD) de flujo. Cada instancia de programa ejecuta el mismo código exacto código. La divergencia solo ocurre cuando la lógica utiliza el pid para calcular desplazamientos de memoria específicos.